java非并发容器ArrayList 和 LinkedList 优缺点比较及其实现源码分析


ArrayList
顾名思义,arraylist内部实现为维护一个数组
其优点为:随机存取元素的效率为o(1)

缺点:由于内存必须是连续的,所以插入一个元素的效率较低,删除一个非结尾的元素效率较低
其具体Arraylist插入的内部实现,根据源码可知
如果当前数组长度不够插个一块新的元素,则新建一块其大小为当前大小*1.5+1的数组,
并拷贝当前元素到新的数组


其具体arraylist删除元素的内部实现,根据其源码可知
若要删除的元素为最后一个元素则直接设置最后一个元素的值为null 并且size减一
否则移动从要删除元素后面的所有元素前进一格,设置最后一个元素的值为null 并且size减一


LinkedList
顾名思义,LinkedList内部实现为维护一个链表(双端链表)
LinkedList是一个标准的双端链表,实际下面的优缺点是数据结构的基本知识

其优点为:可以充分利用计算机内存空间,实现灵活的内存动态管理
由于内存不必连续,链表在插入的时候可以达到O(1)的复杂度

其缺点为: 查找一个节点或者访问特定编号的节点则需要O(n)的时间
ArrayList相应的时间复杂度分别是O(logn)和O(1)。

posted on 2015-07-06 15:09  杜长刚  阅读(381)  评论(0编辑  收藏  举报

导航